Files are stored by operating systems as compressed files or as uncompressed files. A compressed file characteristically requires less storage space than an uncompressed file. Compression of files is typically done with a compression algorithm, such as a GNU (Gnu Not Unix) ZIP (GZIP) compression algorithm or a Lempel Ziv Jeff Bonwick (LZJB) compression algorithm. These compression/decompression algorithms are also referred to as simply GZIP or LZJB compression/decompression algorithms or as GZIP or LZJB compression/decompression types. Dependent on the operating system used, the user may be able to choose whether to use a compression algorithm, and if so, which compression algorithm is to be used. Further, the user may be able to choose the compression algorithm on a per file type basis. Compression/decompression of files can be done in software or in hardware. In the former case, the compression/decompression is also referred to as software-assisted compression/decompression or simply as software compression/decompression.
Software compression/decompression requires a relatively long amount of time to complete and utilizes additional computing resources of the processor. In contrast, hardware compression/decompression is provided, for example, on the same die as the processor or as a separate add-on card for a computing system. In both cases, the physical devices to perform hardware compression/decompression are also referred to as hardware compression/decompression engines or as compression/decompression hardware accelerators. Hardware compression/decompression, when compared to software compression/decompression, generally requires a smaller amount of time to complete and requires less processor resources but at an additional cost. For example, the processor die area on a silicon wafer is at a premium and adding one or more hardware compression/decompression accelerators to the processor die requires additional die area. Similarly, the add-on card with one or more hardware compression/decompression accelerators invokes an additional cost to the computing system. In that respect, it may be beneficial to explore how compression/decompression requirements may be advantageously satisfied while minimizing costs.